Hva er den raskeste metoden for å konvertere en java.nio.ByteBuffer a til en (nyopprettet) CharBuffer b eller char [] b. Ved å gjøre dette er det viktig at a [i] == b [i]. Dette betyr at ikke a [i] og a [i + 1] utgjør en verdi b [j], hva getChar (i) ville gjort, men verdiene skal være "spredt". byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // hver en byte (som er signert) røye b [] = {1,2,3, 125,126,127, 128, 129, 130} // hver en røye (som ikke er signert) Merk at byte: -128 har de samme (nedre 8) bitene som char: 128. Derfor antar jeg at den "beste" tolkningen vil være slik jeg bemerket det ovenfor, fordi bitene er de samme. Etter det trenger jeg også omvendt oversettelse: Den mest effektive måten å få en røye [] eller java.nio.CharBuffer tilbake til en java.nio.ByteBuffer.
2021-01-06 08:19:40
Så det du ønsker er å konvertere ved hjelp av kodingen ISO-8859-1. Jeg hevder ikke noe om effektivitet, men det er i det minste ganske kort å skrive: CharBuffer-resultat = Charset.forName ("ISO-8859-1"). Dekode (byteBuffer); Den andre retningen ville være: ByteBuffer-resultat = Charset.forName ("ISO-8859-1"). Koding (charBuffer); Mål dette mot andre løsninger. (For å være rettferdig, bør ikke Charset.forName-delen inkluderes, og skal også gjøres bare en gang, ikke for hver buffer igjen.) Fra Java 7 er det også StandardCharsets-klassen med forhåndsinstanserte Charset-forekomster, slik at du kan bruke CharBuffer-resultat = StandardCharsets.ISO_8859_1.decode (byteBuffer); og ByteBuffer-resultat = StandardCharsets.ISO_8859_1.encode (charBuffer); i stedet. (Disse linjene gjør det samme som de før, bare oppslaget er enklere og det er ingen risiko for å skrive navnene feil, og du trenger ikke å fange de umulige unntakene.) | Jeg er enig med @ Ishtar, foreslår å unngå å konvertere til en ny struktur i det hele tatt, og bare konvertere etter behov. Men hvis du har en haug ByteBuffer, kan du gjøre det. ByteBuffer bb = ... byte [] array = bb.array (); røye [] tegn = ny røye [bb.resterende ()]; for (int i = 0; i